package com.zhuang.treeset;

import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetDemo {

	public static void main(String[] args) {
		TreeSet<Person> set = new TreeSet<Person>();
		set.add(new Person("成龙", 13));
		set.add(new Person("胡歌", 22));
		set.add(new Person("刘亦菲", 11));
		set.add(new Person("周星驰", 16));
		set.add(new Person("李连杰", 56));
		System.out.println("set:" + set);

		Person person = new Person("古天乐", 23);
		Person person2 = new Person("杨超越",18);
		// public E ceiling(E e)：返回大于或等于给定键值的最小键值
		System.out.println(set.ceiling(person));
		Iterator<Person> iterator = set.descendingIterator();
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}
		// public E first()：获取首点
		System.out.println("set:" + set.first());
		
		// public E floor(E e)：返回小于或等于给定键值的最大键值
		System.out.println(set.floor(person));
		
		// public SortedSet<E> headSet(E toElement)：返回key<=toElement集合
		System.out.println("返回age小于person.age的元素set:" + set.headSet(person));

		// public E higher(E e)：返回严格大于给定键值的最小键值
		System.out.println("返回严格大于给定键值的最小键值:" + set.higher(person));
		
		// public E last()：获取最后的值
		System.out.println("获取最后的值:"+set.last());
		
		// public E lower(E e)：返回严格小于给定键值的最大键值
		System.out.println("获取"+set.lower(person));
		
		// public E pollFirst()：获取第一个值并移除第一个值
		System.out.println("获取第一个值并移除这个值"+set.pollFirst());
		
		// public E pollLast()：获取最后值并移除这个值
		System.out.println("获取最后值并移除这个值"+set.pollLast());
	    System.out.println("set:"+set);
	     
	    // public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement,   boolean toInclusive)：返回from到to之间的值，fromInclusive和toInclusive代表是否包含当前值

	    System.out.println("返回age在18-23之间的值"+set.subSet(person2,true,person,true));
	     
	    // public NavigableSet<E> tailSet(E fromElement, boolean inclusive)返回>=fromElement值的集合元素，inclusive=true包含自身，=false就不包含
	    System.out.println("返回age在18-23之间的值"+set.tailSet(person2,false));
	    
        System.out.println("set:"+set);
	}

}
